/**
 * Classe che si occupa di rendere disponibili all'amato utente, tutte le splendide funzionalità
 * di ResponseHandler
 * @param {Object} visfirst NONSO
 */
function devilResponse(visfirst){
	
	var rHand = new ResponseHandler(ds.length,function(){
		visfirst();
	});
	var selected=0;
	var divName="caronte";
	
	/**
	 * Aggiunge al ResponseHandler una risposta
	 * @param {Object} hr XMLHttpRequest col quale si è effettuata la richiesta
	 */
	this.addQueryResult=function(hr){
		rHand.addSource(hr.responseXML);
	}
	
	
	this.getNextPage=function(){
		if(selected<(rHand.getWindowsNumber()-1)){
			domTemp=rHand.getWindow(selected+1);
			speciali=visualList(divName,selected+1);
			cm.set(speciali);
			cm.set(domTemp);
			cm.redraw("messaggio","response");
		}	
	}

	this.getPrevPage=function(){
		if(selected>0){
			domTemp=rHand.getWindow(selected-1);
			speciali=visualList(divName,selected-1);
			cm.set(speciali);
			cm.set(domTemp);
			cm.redraw("messaggio","response");
		}	
	}

	this.getPage=function (index){	
		if(index>=0||index<rHand.getWindowsNumber()){
			domTemp=rHand.getWindow(index);
			speciali=visualList(divName,index);
			cm.set(speciali);
			cm.set(domTemp);
			cm.redraw("messaggio","response");
		}
	}
	
	/**
	 * Crea un messaggio con un div all'interno avente id specificato che permette di
	 * costruire una lista di paginazione dei response
	 * Permette di evidenziare la pagina selezionata tramite un elemento <b>
	 * @param {Object} name Id del div contenitore
	 * @param {Object} sel
	 */
	function visualList (name,sel){		
		var lista = createDOM("","");
		var msg = lista.createElement("messaggio");
		lista.appendChild(msg);
		
		var divBox = lista.createElement("div");
		msg.appendChild(divBox);
		divBox.setAttribute("id",name);
		var newP = lista.createElement("p");
		divBox.appendChild(newP);
		var pText = lista.createTextNode("Ottenuti " + rHand.getResNum() + " risultati, per " + rHand.getWindowsNumber() + " pagine...");
		newP.appendChild(pText);
		
		var divWrap = lista.createElement("div");
		divBox.appendChild(divWrap);
		var prev = lista.createElement("span");
		divWrap.appendChild(prev);
		prev.setAttribute("onclick","dr.getPrevPage()");
		var indrio = lista.createTextNode("<=indrio ");
		prev.appendChild(indrio);
		
		for(i=0; i<(rHand.getWindowsNumber()); i++){
			var numero = lista.createElement("span");
			divWrap.appendChild(numero);
			numero.setAttribute("onclick","dr.getPage("+(i)+")");
			var teston = lista.createTextNode("-"+(i+1)+"- ");
			if (sel == i){
				var marker=lista.createElement("b");
				numero.appendChild(marker);
				selected=i;
				marker.appendChild(teston);	
			}else		
				numero.appendChild(teston);
		}
		
		var next = lista.createElement("span");
		divWrap.appendChild(next);
		next.setAttribute("onclick","dr.getNextPage()");
		var avent = lista.createTextNode("avent=>");
		next.appendChild(avent);
		return lista;
	}
	
	/**
	 * Controlla se vi è un solo risultato
	 * @return {Object} True se vi è un solo risultato, else altrimenti
	 */
	this.isSoLonely=function(){
		if(rHand.getResNum()==1)
			return true;
		return false;
	}
	
	/**
	 * Controlla se non vi sono risultati
	 * @return {Object} True se non vi sono risultati, false altrimenti
	 */
	this.bedIsTooBigWithoutYou=function(){
		if(rHand.getResNum()==0)
			return true;
		return false;
	}
	
	/**
	 * Si occupa notificare all'utente (tramite un messaggio in "messaggio") che la sua
	 * query non ha prodotto risultati 
	 */
	this.visualBed = function (){		
		lista=createDOM("","");
		msg=lista.createElement("messaggio");
		lista.appendChild(msg);
		divWrap=lista.createElement("div");
		msg.appendChild(divWrap);
		divWrap.setAttribute("id",divName);
		pi=lista.createElement("p");
		divWrap.appendChild(pi);
		txtnode=lista.createTextNode("Nessun risultato ottenuto");
		pi.appendChild(txtnode);
		cm.set(lista);
		cm.redraw("messaggio");
	}
	
	/**
	 * Restituisce l'id del primo risultato 
	 * @return {Object} Uri della prima espressione
	 */
	this.getSingleEid=function(){
		return rHand.getWindow(0).getElementsByTagName("eidentifier")[0].textContent;
	}
	
	this.amIEvilSoScrema=function(value){
		rHand.useScrema(value);
	}
}
